Conventional data communications systems contain a communications stack for transferring data between computers. Each computer typically has a communications stack which contains a number of layers. For example, the open systems interconnect (OSI) communications stack defined by the International Standards Organization consists of seven layers. The layers form a sequence from a lowest layer (or bottom layer) to the highest layer (or top layer). The layers are used to divide the processing necessary for communicating between computers into discrete units. The bottom layer in the communications stack typically interacts with the physical medium used for transferring the data, such as coax cables. The top layer of the communications stack provides services to application programs and the middle layers of the communications stack typically are responsible for routing and maintaining a connection. Data is transferred between a local computer and a remote computer by an application program first passing the data to the top layer of the communications stack of the local computer. The top layer then processes the data and sends the data to the next lowest layer in the communications stack. Thereafter, each layer in turn processes the data until the data reaches the bottom layer, where the data is sent to the remote computer over the transfer medium. The bottom layer of the communications stack of the remote computer receives the data from the transfer medium and passes the data up the communications stack. Each layer performs its specific processing on the data until the data reaches the top layer. The top layer processes the data and sends the data to an application program.
A comstack manager is typically associated with the communications stack and is responsible for starting the communications stack and for maintaining the communications stack during its lifetime. FIG. 1 depicts a communications stack 100 that is managed by a conventional comstack manager 102. The communications stack 100 comprises three layers: layer 104 (the highest layer), layer 106, and layer 108 (the lowest layer). The layers 104, 106, and 108 in the aggregate perform sufficient processing to pass data from one computer to another. Each layer 104, 106, and 108 performs a portion of the functionality necessary to transfer the data and each layer must typically reside on the same computer as the comstack manager 102. Each layer 104, 106 and 108 provides multiple functions that the adjacent layers must know about in order to invoke the functionality of the layer. The comstack manager 102 is responsible for starting the communications stack 100 and for maintaining the communications stack during its lifetime. In starting the communications stack 100, the comstack manager 102 first loads the lowest layer, layer 108, into memory. The comstack manager 102 knows the location of layer 108 because it has configuration information that specifies the name and location of the files containing the layer 108. Upon loading layer 108 into memory, layer 108 sends an indication to the comstack manager 102 of the next highest layer in the communications stack 100 that needs to be loaded. In other words, layer 108 indicates to the comstack manager 102 the location and names of the files containing layer 106. Upon receiving this information, the comstack manager 102 loads layer 106 into memory. After loading layer 106 into memory, the comstack manager 102 loads the highest layer, layer 104 into memory. The comstack manager 102 maintains configuration information which contains the location and names of the files containing layer 104. After loading the layers 104, 106, and 108 into memory, the comstack manager 102 initializes the layers and facilitates the communication between the layers for the lifetime of the communications stack 100.
The conventional comstack manager 102 has various limitations when reconfiguring the communications stack 100. The phrase "reconfiguring a communications stack" refers to providing a new communications stack having one or more different layers than the current communications stack. Reconfiguring a communications stack is necessary since different configurations of communications stacks usually provide different connectivity. That is, each type of communications stack typically establishes a connection to another computer using a different set of protocols. A "protocol" is a set of rules or standards designed to enable computers to connect with one another and to exchange information with as little error as possible. As such, a user may choose to connect to a computer using a different connectivity and hence, the communications stack will need to be reconfigured. One problem with reconfiguring the communications stack 100 in conventional systems is that the comstack manager 102 expects a communications stack having a fixed number of layers, such as exactly three layers. Many communications stacks do not have exactly three layers; but rather have more or fewer layers. This limitation prevents the comstack manager 102 from utilizing communications stacks having four or more layers since the comstack manager has no facility for handling these types of communications stacks. Further, this limitation makes it difficult to use communications stacks having fewer than three layers. In order to use a communications stack having fewer than three layers with the comstack manager 102, dummy layers must be inserted where a layer would otherwise have been located. For example, if a communications stack having only one layer is to be used, it would take the place of layer 108 and two dummy layers would have to be created to take the place of layers 104 and 106. Such a dummy layer acts as a pass through mechanism that unnecessarily increases the processing time required to transmit data from one computer to another.
A second problem with the conventional comstack manager 102 is that the location and names of the files containing layer 106 is hard coded into layer 108. As such, in order to substitute a different lowest layer into the communications stack 100 to replace layer 108, changes have to be made to the code of the layer 108. Based upon the above limitations, it is desirable to improve the reconfigurability of a communications stack.